Introdução ao ImageLabeller

O ImageLabeller é um aplicativo de demonstração simples que usa aprendizado de máquina para aplicar etiquetas às imagens. Ele usa o AWS Lambda, o AWS DynamoDB, o AWS S3, o AWS SageMaker, o AWS API Gateway, o AWS CloudWatch e o AWS CloudFormation, e é escrito em Go e Python. Este guia aborda como usar as ferramentas do Atlassian Open DevOps para implementar e monitorar um subconjunto desses componentes.
Arquitetura do ImageLabeller

Como funciona
Um usuário invoca o AWS Lambda SubmitImage, passando um URL de imagem válido como parâmetro. O SubmitImage baixa a imagem, a carrega para uma open-devops-images-<region> do bucket do AWS S3, insere uma nova tupla em uma tabela do AWS DynamoDB ImageLabels e retorna um token de ID de imagem para o usuário. O token de ID da imagem é usado para correlacionar a imagem em open-devops-images-<region> e a tupla em ImageLabels.
O AWS Lambda InvokeLabeller tem um acionador de eventos do AWS DynamoDB. O InvokeLabeller baixa a imagem correspondente de open-devops-images-<region>, chama um modelo pré-treinado do AWS SageMaker Inception V3 para gerar etiquetas de imagem e atualiza a tupla em ImageLabels quando uma nova tupla é inserida nele
O usuário invoca o AWS Lambda GetImageLabel, passando o token de ID da imagem como parâmetro. GetImageLabel pesquisa as categorias associadas ao token de ID da imagem em ImageLabels e as retorna ao usuário. O usuário recebe uma categoria NOT_CLASSIFIED se o modelo do AWS SageMaker não tiver concluído o processamento de uma imagem.
O ImageLabeller é implementado em cinco ambientes. Há um ambiente Teste no us-west-1, um ambiente Staging no us-east-2 e três ambientes de produção no us-west-2, us-east-1 e ca-central-1.
Componentes
Os buckets do AWS S3 e as tabelas do AWS DynamoDB que fazem parte do ImageLabeller são implementados usando templates do AWS CloudFormation. Este guia oferece informações de configuração de IC/CD (integração/implementação contínuas) sobre como implementar os buckets do AWS S3. O processo de implementação das tabelas do AWS DynamoDB é quase idêntico e é deixado como um exercício para você realizar sozinho.
Há três AWS Lambda no ImageLabeller: SubmitImage, InvokeLabeller e GetImageLabel. Este guia oferece informações de configuração de IC/CD sobre como implementar o SubmitImage. O processo de implementação do GetImageLabel é quase idêntico e também deve ser concluído por conta própria.
O InvokeLabeller é um AWS Lambda baseado em python e requer pequenas atualizações antes de poder ser publicado. Especificamente, o InvokeLabeller depende da configuração do AWS SageMaker, que é feita por meio do console da AWS.
Os testes do sistema incluídos no projeto ImageLabeller o testam como um todo. Os testes vão falhar se algum componente do ImageLabeller não estiver presente ou funcionando conforme o esperado. Todas as implementações de SubmitImage, GetImageLabel e InvokeLabeller executam os testes do sistema como parte de seus respectivos pipelines de IC/CD.
Para a implementação inicial de SubmitImage, GetImageLabel e InvokeLabeller, você precisa comentar as etapas de execução do teste do sistema. Depois que as implementações forem executadas com êxito uma vez, você vai poder remover os comentários das etapas de execução do teste do sistema e reimplementar.
Pedido de implementação de componentes
Faça a implementação manual do modelo pré-treinado do AWS SageMaker por meio do console da AWS
Implemente repositórios de infraestrutura da AWS
s3_infra
dynamodb_infra
Implemente o AWS Lambdas
SubmitImage
GetImageLabel
InvokeLabeller
Implemente testes do sistema
Implemente o CloudWatchAlarms